Several protocols exist for transmitting streaming media from a server to one or more client systems. One common protocol is TCP (transmission control protocol), which works well for transmitting media content that will not be presented immediately, or for which presentation quality can be compromised. The reason for this is that the TCP protocol has a built-in retry mechanism that automatically adjusts the data transfer rate based on lost packets. When transmitting streaming media content for immediate presentation to a user, automatic data transfer rate adjustments frequently lead to an under run scenario in which a client does not receive data quickly enough to enable immediate presentation of the data. For example, if a client device is receiving video data and experiences an under run, a single frame or a black screen may be displayed for some period of time until the client device receives enough data to resume presentation of the video.
To overcome the data under run problem that is common with the TCP protocol, streaming media systems often deliver media content using unreliable data communications protocols, such as UDP (user datagram protocol), which enables the system to maintain a particular data transfer rate that is not impacted by packet loss. In such an implementation, the client system is responsible for notifying the server of any packets that are not received by the client.
However, requiring a server to retransmit a packet each time a client reports a missing packet can lead to a network that is dominated by either a particular client that has lost a significant number of packets or a hostile attacker simulating a client requesting a large number of retries.
Accordingly, a need exists for techniques that enable a server system to track the status of a client to determine whether or not to respond to retry requests from that client.